<?php

/**
 * UniteFonctionnelle form.
 *
 * @package    sop
 * @subpackage form
 * @author     Your name here
 */
class UniteFonctionnelleForm extends BaseUniteFonctionnelleForm {

  public function configure() {
    $this->useFields(array('libelle', 'asso_salarie_unite_fonctionnelle_list'));

    $this->widgetSchema['asso_salarie_unite_fonctionnelle_list']->addOption('renderer_class', 'sfWidgetFormSelectDoubleListSop')
                                                                ->addOption('renderer_options', array(
                                                                    'associated_first'    => false, 
                                                                    'label_unassociated'  => "Non associ&eacute;", 
                                                                    'label_associated'    => "Associ&eacute;"
                                                                ))
                                                                ->addOption('label', "Responsables")
                                                                ->setAttribute('size', 5);
    $this->validatorSchema['asso_salarie_unite_fonctionnelle_list'] = new sfValidatorPass(array('required' => false));
  }

  public function updateDefaultsFromObject() {
    parent::updateDefaultsFromObject();

    if (isset($this->widgetSchema['asso_salarie_unite_fonctionnelle_list'])) {
      $values = array();
      foreach ($this->object->getAssoSalarieUniteFonctionnelles() as $obj)
        if ($obj->getIsResponsable())
          $values[] = $obj->getSalarieId();

      $this->setDefault('asso_salarie_unite_fonctionnelle_list', $values);
    }
  }

  public function saveAssoSalarieUniteFonctionnelleList($con = null) {
    if (!$this->isValid())
      throw $this->getErrorSchema();

    if (!isset($this->widgetSchema['asso_salarie_unite_fonctionnelle_list']))
      return;

    if (null === $con)
      $con = $this->getConnection();
    
    $c = new Criteria();
    $c->add(AssoSalarieUniteFonctionnellePeer::UF_ID, $this->object->getPrimaryKey());
    foreach(AssoSalarieUniteFonctionnellePeer::doSelect($c) as $asso) {
      $asso->setIsResponsable(0);
      $asso->save();
    }

    $values = $this->getValue('asso_salarie_unite_fonctionnelle_list');
    if (is_array($values)) {
      foreach ($values as $value) {
        $c = new Criteria();
        $c->add(AssoSalarieUniteFonctionnellePeer::UF_ID, $this->object->getPrimaryKey());
        $c->add(AssoSalarieUniteFonctionnellePeer::SALARIE_ID, $value);
        
        if($salarie = AssoSalarieUniteFonctionnellePeer::doSelectOne($c)) {
          $salarie->setIsResponsable(1);
          $salarie->save();
        } else {
          $obj = new AssoSalarieUniteFonctionnelle();
          $obj->setUfId($this->object->getPrimaryKey());
          $obj->setSalarieId($value);
          $obj->setIsResponsable(1);
          $obj->save();
        }
      }
    }
  }

}
